'''
Description: 
Version: 2.0
Autor: ruog__
Date: 2024-04-30 16:54:43
LastEditors: ruog__
LastEditTime: 2024-05-22 15:21:03
'''
import requests
import serial

# 定义经纬度路径信息
coordinates = [
    '119.133484,36.664349,202405061616',  
    '119.135155,36.664276,202405061716',
    '119.134917,36.665429,202405061816',  
    '119.134903,36.66591,202405061816',
    '119.134876,36.66701,202405061816',
    '119.132073,36.671736,202405061816',
    '119.132011,36.672612,202405061816',
    '119.130268,36.672452,202405061816',
    '119.129262,36.672054,202405061816',#忙春堂大药房
    # 添加更多经纬度坐标...
]

#发送路径信息
def send_coordinates():
    # 构造请求数据
    data = {'coordinates': coordinates}
    # 发送 POST 请求到服务器
    url = 'http://43.143.218.78:8000/save_coordinates/'
    
    response = requests.post(url, data=data)

    # 打印服务器响应
    print(response.text)


    
"""
发送位置信息到指定服务器。

Args:
    position (str): 位置坐标，格式为"纬度,经度"。

Returns:
    None

"""
def send_position(position):
    # 构造请求数据
    # data = {'coordinates': '40.7128,-74.0060'}
    data = {'coordinates': position}
    url = 'http://43.143.218.78:8000/update_position/'

    response = requests.get(url, params=data)
    print(response.text)

def parse_loc_val(val, d):
    v = float(val)/100
    v = int(v) + (v-int(v))*100/60
    if d=='S' or d=='W':
        v = v * -1
    return v
#获取经纬度信息
def parse_gprmc(data):
    '''
    b'$GPRMC,111025.00,A,2517.033747,N,11019.176025,E,0.0,144.8,270920,2.3,W,A*2D\r\n'
    b'$GPRMC,,V,,,,,,,,,,N*53\r\n'
    b'$GPRMC,024443.0,A,2517.038296,N,11019.174048,E,0.0,,120201,0.0,E,A*2F\r\n'
    $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF> 
    <1> UTC时间，hhmmss（时分秒）格式 
    <2> 定位状态，A=有效定位，V=无效定位 
    <3> 纬度ddmm.mmmm（度分）格式（前面的0也将被传输） 
    <4> 纬度半球N（北半球）或S（南半球） 
    <5> 经度dddmm.mmmm（度分）格式（前面的0也将被传输） 
    <6> 经度半球E（东经）或W（西经）
    <7> 地面速率（000.0~999.9节，前面的0也将被传输） 1节=1.852千米（km/h)
    <8> 地面航向（000.0~359.9度，以真北为参考基准，前面的0也将被传输） 
    <9> UTC日期，ddmmyy（日月年）格式 
    <10> 磁偏角（000.0~180.0度，前面的0也将被传输） 
    <11> 磁偏角方向，E（东）或W（西） 
    <12> 模式指示（仅NMEA0183 3.00版本输出，A=自主定位，D=差分，E=估算，N=数据无效）
    '''
    li = data.decode().replace('$GNRMC,', '').strip().split(',')
    lat=log=speed=direct=0
    if li[1] == 'A':
        lat = round(parse_loc_val(li[2], li[3]), 6)   #纬度
        log = round(parse_loc_val(li[4], li[5]), 6)   #经度
        speed = float(li[6]) * 1.852
        if len(li[7])>0:
            direct = float(li[7])
        else:
            direct = 0
        #logging.info('lat:{:.6f},log:{:.6f},speed:{},direct:{}'.format(lat, log, speed, direct))
    return (lat,log,speed, direct)


def get_uart_data():
    # 设置串口参数
    ser = serial.Serial('/dev/ttyAS5', baudrate=9600, timeout=1)

    while True:
        # 读取一行数据
        line = ser.readline().decode().strip()
        
        # 判断是否包含 'lsh' 字符
        if 'GNRMC' in line:
            # print(line)
            return line

if __name__ == '__main__':
    # coordinates = []  #更新位置信息
    # send_coordinates() #发送路径信息

    # send_position('119.129693,36.665319')#金泉寺
    data = get_uart_data()
    print(data)
    lat,log,speed, direct = parse_gprmc(data)
    print(log,lat)